package com.cardone.platform.configuration.service;

import java.util.List;
import java.util.Map;

import com.cardone.common.cache.support.CacheEvictSupport;
import com.cardone.common.dto.PaginationDto;
import com.cardone.platform.configuration.dto.DictionaryDto;
import com.cardone.platform.configuration.dto.DictionaryTypeDto;

/**
 * 字典服务
 * 
 * @author yaoht
 */
public interface DictionaryService extends CacheEvictSupport {
	/**
	 * spring bean id
	 */
	String BEAN_ID = "com.cardone.platform.configuration.service.DictionaryService";

	/**
	 * 查询:字典
	 * 
	 * @param typeCo
	 *            类别编号
	 * @param code
	 *            编号
	 * @return 字典
	 */
	DictionaryDto findDictionaryByTypeCodeAndCode(final String typeCo, final String code);

	/**
	 * 读取：字典
	 * 
	 * @param requiredType
	 *            返回类型
	 * @param objectId
	 *            对象标识
	 * @param defaultValue
	 *            默认值
	 * @param typeCode
	 *            类别编号
	 * @param code
	 *            编号
	 * @return 返回值
	 */
	<T> T readDictionaryByTypeCodeAndCode(final Class<T> requiredType, final String objectId, final T defaultValue,
	        final String typeCode, final String code);

	/**
	 * 保存:字典类型
	 * 
	 * @param saveDictionaryType
	 *            字典类型对象
	 * 
	 * @return 字典类型对象
	 */
	DictionaryTypeDto saveDictionaryTypeByIdOrCode(final DictionaryTypeDto saveDictionaryType);

	/**
	 * 保存:字典类型
	 * 
	 * @param saveDictionaryType
	 *            字典类型对象
	 * 
	 * @return 字典类型对象
	 */
	DictionaryTypeDto saveDictionaryTypeByCode(final DictionaryTypeDto saveDictionaryType);

	/**
	 * 删除:字典类型
	 * 
	 * @param deleteDictionaryType
	 *            字典类型对象
	 * 
	 * @return 影响行数
	 */
	int deleteDictionaryTypeByCode(final DictionaryTypeDto deleteDictionaryType);

	/**
	 * 删除:字典类型
	 * 
	 * @param deleteDictionaryType
	 *            字典类型对象
	 * 
	 * @return 影响行数
	 */
	int deleteDictionaryTypeByIds(final DictionaryTypeDto deleteDictionaryType);

	/**
	 * 设置:字典类型
	 * 
	 * @param updateDictionaryType
	 *            字典类型对象
	 * 
	 * @return 影响行数
	 */
	int updateDictionaryTypeByCode(final DictionaryTypeDto updateDictionaryType);

	/**
	 * 设置:字典类型
	 * 
	 * @param updateDictionaryType
	 *            字典类型对象
	 * 
	 * @return 影响行数
	 */
	int updateDictionaryTypeByIds(final DictionaryTypeDto updateDictionaryType);

	/**
	 * 读取:字典类型
	 * 
	 * @param readDictionaryType
	 *            字典类型对象
	 * 
	 * @return 字典类型对象
	 */
	Integer readDictionaryTypeByCodeNqId(final DictionaryTypeDto readDictionaryType);

	/**
	 * 读取:字典类型
	 * 
	 * @param readDictionaryType
	 *            字典类型对象
	 * 
	 * @return 字典类型对象
	 */
	Integer readDictionaryTypeByName(final DictionaryTypeDto readDictionaryType);

	/**
	 * 查询:字典类型
	 * 
	 * @param findDictionaryType
	 *            字典类型对象
	 * 
	 * @return 字典类型对象
	 */
	DictionaryTypeDto findDictionaryTypeByCode(final DictionaryTypeDto findDictionaryType);

	/**
	 * 查询:字典类型
	 * 
	 * @param findDictionaryType
	 *            字典类型对象
	 * 
	 * @return 字典类型对象
	 */
	DictionaryTypeDto findDictionaryTypeById(final DictionaryTypeDto findDictionaryType);

	/**
	 * 查询:字典类型
	 * 
	 * @param findListDictionaryType
	 *            字典类型对象
	 * 
	 * @return 字典类型对象集合
	 */
	List<DictionaryTypeDto> findListDictionaryTypeByCode(final DictionaryTypeDto findListDictionaryType);

	/**
	 * 查询:字典类型
	 * 
	 * @param findListDictionaryType
	 *            字典类型对象
	 * 
	 * @return 字典类型对象集合
	 */
	List<DictionaryTypeDto> findListDictionaryTypeByName(final DictionaryTypeDto findListDictionaryType);

	/**
	 * 分页:字典类型
	 * 
	 * @param paginationDictionaryType
	 *            字典类型对象
	 * 
	 * @return 字典类型分页对象
	 */
	PaginationDto<DictionaryTypeDto> paginationDictionaryTypeByCode(final DictionaryTypeDto paginationDictionaryType);

	/**
	 * 分页:字典类型
	 * 
	 * @param paginationDictionaryType
	 *            字典类型对象
	 * 
	 * @return 字典类型分页对象
	 */
	PaginationDto<Map<String, Object>> paginationDictionaryTypeByName(final DictionaryTypeDto paginationDictionaryType);

	/**
	 * 保存:字典
	 * 
	 * @param saveDictionary
	 *            字典对象
	 * 
	 * @return 字典对象
	 */
	DictionaryDto saveDictionaryByIdOrCode(final DictionaryDto saveDictionary);

	/**
	 * 保存:字典
	 * 
	 * @param saveDictionary
	 *            字典对象
	 * 
	 * @return 字典对象
	 */
	DictionaryDto saveDictionaryByCode(final DictionaryDto saveDictionary);

	/**
	 * 删除:字典
	 * 
	 * @param deleteDictionary
	 *            字典对象
	 * 
	 * @return 影响行数
	 */
	int deleteDictionaryByCode(final DictionaryDto deleteDictionary);

	/**
	 * 删除:字典
	 * 
	 * @param deleteDictionary
	 *            字典对象
	 * 
	 * @return 影响行数
	 */
	int deleteDictionaryByIds(final DictionaryDto deleteDictionary);

	/**
	 * 设置:字典
	 * 
	 * @param updateDictionary
	 *            字典对象
	 * 
	 * @return 影响行数
	 */
	int updateDictionaryByCode(final DictionaryDto updateDictionary);

	/**
	 * 设置:字典
	 * 
	 * @param updateDictionary
	 *            字典对象
	 * 
	 * @return 影响行数
	 */
	int updateDictionaryByIds(final DictionaryDto updateDictionary);

	/**
	 * 读取:字典
	 * 
	 * @param readDictionary
	 *            字典对象
	 * 
	 * @return 字典对象
	 */
	Integer readDictionaryByCodeNqId(final DictionaryDto readDictionary);

	/**
	 * 读取:字典
	 * 
	 * @param readDictionary
	 *            字典对象
	 * 
	 * @return 字典对象
	 */
	Integer readDictionaryByName(final DictionaryDto readDictionary);

	/**
	 * 查询:字典
	 * 
	 * @param findDictionary
	 *            字典对象
	 * 
	 * @return 字典对象
	 */
	DictionaryDto findDictionaryByCode(final DictionaryDto findDictionary);

	/**
	 * 查询:字典
	 * 
	 * @param findDictionary
	 *            字典对象
	 * 
	 * @return 字典对象
	 */
	DictionaryDto findDictionaryById(final DictionaryDto findDictionary);

	/**
	 * 查询:字典
	 * 
	 * @param findListDictionary
	 *            字典对象
	 * 
	 * @return 字典对象集合
	 */
	List<DictionaryDto> findListDictionaryByCode(final DictionaryDto findListDictionary);

	/**
	 * 查询:字典
	 * 
	 * @param findListDictionary
	 *            字典对象
	 * 
	 * @return 字典对象集合
	 */
	List<DictionaryDto> findListDictionaryByName(final DictionaryDto findListDictionary);

	/**
	 * 分页:字典
	 * 
	 * @param paginationDictionary
	 *            字典对象
	 * 
	 * @return 字典分页对象
	 */
	PaginationDto<DictionaryDto> paginationDictionaryByCode(final DictionaryDto paginationDictionary);

	/**
	 * 分页:字典
	 * 
	 * @param paginationDictionary
	 *            字典对象
	 * 
	 * @return 字典分页对象
	 */
	PaginationDto<Map<String, Object>> paginationDictionaryByName(final DictionaryDto paginationDictionary);

	/**
	 * 初始化:字典
	 * 
	 * @param initDictionaryTypeList
	 *            字典类型集合
	 */
	void initDictionary(final List<DictionaryTypeDto> initDictionaryTypeList);;
}